// 验证服务器的有效性
/**
 * 1. 微信服务气要知道开发者服务器
 * 2. 测试号 填写的服务器地址
 *  - 使用ngrok内网穿透
 *  http://32508ddc.ngrok.io // 内网穿透
 *  ./ngrok http 3000 // 运行ngrok
 *
 *
 3. 验证消息是否来自微信服务器
 1、 将参与微信加密签名的三个参数（timestamp，nonce，token）按照字典顺序排序并组合在一起形成一个数组
 2、 将数组里所有参数拼装成一个字符串，进行sha1加密
 3、 加密完成就生成一个signatrue，和微信发送过来的进行对比
 - 如果一样，说明消息来自微信，返回echostr给微信服务器
 - 如果不一样， 说明不是微信服务器发送的信息，返回error
 */

/**
 * 验证服务器有效性
 * 中间件函数
 * @returns {Function}
 */

// 引入config模块
const config = require('../config');

console.info(config)
// 引入sha1 模块
const sha1 = require('sha1');

module.exports = ()=>{
    return (req, res, next)=>{
        /* {
             signature: '86d48f96829597c12a191b38cf61f6734d8bbd1f', // 微信加密签名
             echostr: '5199894156433118053', // 微信的随机字符串
             timestamp: '1560494945', // 微信的发送请求时间戳
             nonce: '1299100121' // 微信的随机数字
         }*/

        const {signature, echostr, timestamp, nonce} = req.query;
        const {token} = config;
        console.log(req.query);
        // 1按字典顺序排放
        const arr = [timestamp, nonce, token];
        const arrSort = arr.sort();
        console.log(arrSort);
        // 2加密
        const str = arr.join('');
        const sha1Str = sha1(str);
        console.log(sha1Str);
        // 3对比
        console.log(sha1Str === signature)

        if(sha1Str === signature){
            res.send(echostr)
        }else{
            res.end('error');
        }
    }
}